package org.yatr.ttcn.rt;

import org.etsi.ttcn.tci.TciCDRequired;
import org.etsi.ttcn.tci.TciCHProvided;
import org.etsi.ttcn.tci.TciCHRequired;
import org.etsi.ttcn.tci.TciTMProvided;
import org.etsi.ttcn.tci.TciTMRequired;
import org.etsi.ttcn.tri.TriCommunicationSA;
import org.etsi.ttcn.tri.TriCommunicationTE;
import org.etsi.ttcn.tri.TriPlatformPA;
import org.etsi.ttcn.tri.TriPlatformTE;

import org.etsi.ttcn.tci.TciCDProvided;

/**
 * Objects that give the TTCN-3 Runtime Behavior access to specific
 * encoders/decoders have to implement this interface in order to
 * respond on encoding/decoding requests by the TTCN-3 Runtime
 * Behavior.<p>
 *
 * Typically this will be the test adapter object. However, dedicated
 * objects might also serve as <code>TciEncoding</code>.
 * 
 *
 * @author Theofanis Vassiliou-Gioles
 * @version 0.1 */

public interface RuntimeObject {
    /**
     * Notfiies the RB that <code>management</code> shall be used as Test
     * Manager.
     * @param management a <code>TciTMProvided</code> value
     */
    void setTciTMProvided(TciTMProvided tciTMProvided);

    /**
     * DOCUMENT ME!
     *
     * @param tciTMRequired DOCUMENT ME!
     */
    void setTciTMRequired(TciTMRequired tciTMRequired);


    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
	TciTMRequired getTciTMRequired();

	TciTMProvided getTciTMProvided();

    /**
     * Notfiies the RB that <code>encoding</code> shall be used as encoding
     * adaptor.
     * @param encoding a <code>TciEncoding</code> value
     */
    void setTciEncoding(TciEncoding encoding);

    /**
     * Describe <code>getTciEncoding</code> method here.
     *
     * @return a <code>TciEncoding</code> value
     */
    TciEncoding getTciEncoding();

    /**
     * Notfies the RB that <code>tciCHProvided</code> shall be used as
     * intercomponent handling (TciCHProvided).
     *
     * @param tciCHProvided a <code>TciCHProvided</code> implemenatation.
     */
    void setTciCHProvided(TciCHProvided tciCHProvided);

    /**
     * Notfies the RB that <code>tciCHRequired</code> shall be used as
     * intercomponent handling (TciCHRequired).
     *
     * @param tciCHProvided a <code>TciCHProvided</code> implemenatation.
     */
    void setTciCHRequired(TciCHRequired tciCHRequired);

    /**
     * Describe <code>getTriCommunicationTE</code> method here.
     *
     * @return a <code>TriCommunicationTE</code> value
     */
    TriCommunicationTE getTriCommunicationTE();

    /**
     * Describe <code>getTriCommunicationSA</code> method here.
     *
     * @return a <code>TriCommunicationSA</code> value
     */
    TriCommunicationSA getTriCommunicationSA();

    /**
     * Describe <code>setTriCommunicationSA</code> method here.
     *
     * @param sa a <code>TriCommunicationSA</code> value
     */
    void setTriCommunicationSA(TriCommunicationSA sa);

    /**
     * Describe <code>getTriPlatformTE</code> method here.
     *
     * @return a <code>TriPlatformTE</code> value
     */
    TriPlatformTE getTriPlatformTE();

    /**
     * Describe <code>getDefaultTriPlatformPA</code> method here.
     *
     * @return a <code>TriPlatformPA</code> value
     */
    TriPlatformPA getDefaultTriPlatformPA();

    /**
     * Describe <code>getTriPlatformPA</code> method here.
     *
     * @return a <code>TriPlatformPA</code> value
     */
    TriPlatformPA getTriPlatformPA();

    /**
     * Describe <code>setTriPlatformPA</code> method here.
     *
     * @param pa a <code>TriPlatformPA</code> value
     */
    void setTriPlatformPA(TriPlatformPA pa);

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    //TACReflection getTACReflection();

    /**
     * This method returns the current used TciCHRequired.
     *
     * @return the current TciCDRequired
     */
    TciCDRequired getTciCDRequired();

    /**
     * This method returns the current used TciCHProvided.
     *
     * @return the current TciCHProvided.
     */
    TciCHProvided getTciCHProvided();

    /**
     * DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     */
    TciCHRequired getTciCHRequired();
    
    /**
     * This method provides access to the Debugger. For now it is
     * thought for internal use only.
     *
     * @return An object that provides access to the debugger.
     */
    //IRuntimeDebugger getDebugger();
}
